package this关键字;
/*
 *this关键字的使用
 *  1. this可以用来修饰：属性、方法、构造器、调用
 *  2. this修饰属性和方法
 *     this理解为：当前对象
 *     2.1  在类的方法中，我们可以使用"this.属性 "或"this.方法"的方式，调用当前
 *          对象属性或方法。但是，通常情况下，我们都选择省略"this."。特殊情况下，如果
 *          方法的形参和类的属性同名时，我们必须显示的使用"this.变量"的方式，表明
 *          此变量是属性，而非形参
 *     2.2  在类的构造器中，我们可以使用"this.属性"或"this.方法"的方式，调用当前正在创建的对象属性或方法
 *           但是，通常情况下，我们都选择省略"this."。特殊情况下，如果构造器的形参和类的属性同名时，我们必须显示
 *            的使用"this.变量"的方式，表明此变量是属性，而非形参。
 *
 *   3 this调用构造器
 *      我们在类的构造器中，可以显示的使用"this(形参列表)"方式，调用本类中指定的其他构造器
 *      构造器中不能通过"this(形参列表)"方式调用自己
 *      "this(形参列表)"必须声明在当前构造器的首行
 *      构造器内部，最多只能声明一个"this(形参列表)"，用来调用其他构造器
 * */

public class Person {
    public static void main(String[] args) {
        PersonTest test = new PersonTest();
        System.out.println(test.getClass()+"object");
        test.setAge(1);
        test.setName("杨魁");
        System.out.println(test.getAge()+""+test.getName());
        test.hahha();
    }
}
class PersonTest{
    private int age;
    private String name;
    public PersonTest(){
        this("ja");
    }
    public void hahha(){
        this.haha();
        PersonTest.this.haha();
        System.out.println("hahha调用haha");

    }
    public void haha(){
        System.out.println("只是验证一下");
    }
    public PersonTest(String name){
       // this();//调用空参
        this.name=name;
    }

    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge(){
        return age;
    }
}
